import axios from 'axios'
import {Message} from 'element-ui'
import {Loading} from 'element-ui'


/**
 * 封装axios请求
 * @param url 请求地址
 * @param data 请求参数
 * @param errorMsg 错误提示
 * @param callback 成功调用回调处理
 */
export const post = (url, data, errorMsg, callback) => {
  let m = Message;
  axios({
    url: url,
    headers: {'Content-Type': 'application/json;charset=UTF-8'},
    data: data,
    method: 'post'
  }).then(res => {
    callback(res.data);
  }).catch(err => {
      if (err.response != undefined && err.response.status != undefined && err.response.status == 401) {
        //m.error("您的登录信息已失效，请重新登录！")
      } else {
        m.error(errorMsg + "异常: " + err.toString());
      }
    }
  )
}


/**
 * 封装axios请求
 * @param url 请求地址
 * @param data 请求参数
 * @package fileName 下载的文件名称
 * @param errorMsg 错误提示
 * @param callback 成功调用回调处理
 */
export const postBlob = (url, data, fileName, errorMsg, callback) => {
  let m = Message;
  axios({
    url: url,
    headers: {'Content-Type': 'application/json;charset=UTF-8'},
    data: data,
    responseType: 'blob',  //responseType: 'arraybuffer'，
    method: 'post'
  }).then(res => {
    if (res.data.size <= 0) {
      m.error(errorMsg + "异常: 空文件");
      return
    }
    let url = window.URL.createObjectURL(new Blob([res.data]));
    let link = document.createElement('a');
    link.style.display = 'none';
    link.href = url;
    link.setAttribute('download', fileName);
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    window.URL.revokeObjectURL(url);


  }).catch(err => {
      if (err.response != undefined && err.response.status != undefined && err.response.status == 401) {
        //m.error("您的登录信息已失效，请重新登录！")
        timeOutLogin.TimeOutReLogin("你尚未登录或登录已经超时，请重新登录");
      } else {
        m.error(errorMsg + "异常: " + err.toString());
      }
    }
  )
}


/**
 * 封装axios请求
 * @param url 请求地址
 * @param data 请求参数
 * @package fileName 下载的文件名称
 * @param errorMsg 错误提示
 * @param callback 成功调用回调处理
 */
export const postBuffer = (url, data, fileName, errorMsg, callback) => {
  let m = Message;
  const loading = Loading.service({
    lock: true,
    text: '导出中..',
    spinner: 'el-icon-loading',
    background: 'rgba(0, 0, 0, 0.7)'
  });

  axios({
    url: url,
    headers: {'Content-Type': 'application/json;charset=UTF-8'},
    data: data,
    responseType: 'arraybuffer',  //responseType: 'arraybuffer'，
    method: 'post'
  }).then(res => {
    loading.close();

    let url = window.URL.createObjectURL(new Blob([res.data]));
    let link = document.createElement('a');
    link.style.display = 'none';
    link.href = url;
    link.setAttribute('download', fileName);
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    window.URL.revokeObjectURL(url);
  }).catch(err => {
      loading.close();

      if (err.response != undefined && err.response.status != undefined && err.response.status == 401) {
        //m.error("您的登录信息已失效，请重新登录！")
        timeOutLogin.TimeOutReLogin("你尚未登录或登录已经超时，请重新登录");
      } else {
        var enc = new TextDecoder('utf-8')
        var res = JSON.parse(enc.decode(new Uint8Array(err.response.data))) //转化成json对象
        m.error(errorMsg + "异常: " + res.message);
      }
    }
  )
}

/**
 * 封装axios请求
 * @param url 请求地址
 * @param data 请求参数
 * @param errorMsg 错误提示
 * @param callback 成功调用回调处理
 */
export const postDecrypt = (url, data, errorMsg, callback) => {
  let m = Message;
  axios({
    url: url,
    headers: {'Content-Type': 'application/json;charset=UTF-8'},
    data: data,
    method: 'post'
  }).then(res => {
    res = JSON.parse(jsEvent.desDecode(res.data))
    callback(res);
  }).catch(err => {
      err = JSON.parse(jsEvent.desDecode(err.response));
      if (err.response != undefined && err.response.status != undefined && err.response.status == 401) {
        //m.error("您的登录信息已失效，请重新登录！")
        timeOutLogin.TimeOutReLogin("你尚未登录或登录已经超时，请重新登录");
      } else {
        m.error(errorMsg + "异常: " + err.toString());
      }
    }
  )
}
